FUNCTION MODULE ZSTB_DS_USER_EXIT
FUNCTION GROUP  ZSTB_FUNCTION_GROUP
DESCRIPTION     datasource user exit
PROCESSING TYPE : normal function module

IMPORT
PARAMETER   |TYPE_SPEC|ASSOCIATED_TYPE       |DEFAULT|OPTIONAL|PASS_VALUE|DESCRIPTION 
------------|---------|----------------------|-------|--------|----------|------------
SESSION_ID  |TYPE     |ZSTB_SESSION_ID_TYPE  |       |NO      |NO        |session ID  
REQUEST_UUID|TYPE     |ZSTB_REQUEST_UUID_TYPE|       |NO      |NO        |request UUID

CHANGING
PARAMETER   |TYPE_SPEC|ASSOCIATED_TYPE|DEFAULT|OPTIONAL|PASS_VALUE|DESCRIPTION   
------------|---------|---------------|-------|--------|----------|--------------
FETCH_NUMBER|TYPE     |INT4           |       |NO      |NO        |Natural Number
LINE_COUNTER|TYPE     |INT4           |       |NO      |NO        |Natural Number

TABLES
PARAMETER      |TYPE_SPEC|ASSOCIATED_TYPE|OPTIONAL|DESCRIPTION             
---------------|---------|---------------|--------|------------------------
LOADED_DS_FETCH|         |               |NO      |loaded data source fetch

SOURCE CODE
...........
function zstb_ds_user_exit.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(SESSION_ID) TYPE  ZSTB_SESSION_ID_TYPE
*"     REFERENCE(REQUEST_UUID) TYPE  ZSTB_REQUEST_UUID_TYPE
*"  TABLES
*"      LOADED_DS_FETCH
*"  CHANGING
*"     REFERENCE(FETCH_NUMBER) TYPE  INT4
*"     REFERENCE(LINE_COUNTER) TYPE  INT4
*"----------------------------------------------------------------------

data:
  numberfields type i,
  line_number type i,
  field_separator type zstb_field_sep_type,
  string_delimiter type zstb_string_delim_type,
  max_line_number type zstb_line_number_type,
  row_separator type zstb_row_separator_type.
field-symbols: <datarow> type any.

* retrieve variables
import field_separator from memory id 'ZSTB_FIELD_SEPARATOR'.
import string_delimiter from memory id 'ZSTB_STRING_DELIMITER'.
import max_line_number from memory id 'ZSTB_MAX_LINE_NUMBER'.
import row_separator from memory id 'ZSTB_ROW_SEPARATOR'.

* count number of fields
call function 'ZSTB_COUNT_NUMBER_FIELDS'
  importing
    numberfields = numberfields
  tables
    table_to_count = loaded_ds_fetch.

* load temporary table
* TODO : before filling transfert table, apply filters to :
* - select only the fields we want, like select ... in sql or fields in zstb_rfc_sql_select
* - select only the fields we want, like where ... in sql or whereclause in zstb_rfc_sql_select
line_number = 0.
loop at loaded_ds_fetch assigning <datarow>.
* insert into transfert table
  call function 'ZSTB_INSERT_TRANSF_TBL'
    exporting
      numberfields = numberfields
      datarow = <datarow>
      string_delimiter = string_delimiter
      field_separator = field_separator
      row_separator = row_separator
      session_id = session_id
      request_uuid = request_uuid
      fetch_number = fetch_number
      line_number = line_number.
* next line
  line_counter = line_counter + 1.
  check line_counter < max_line_number.
  line_number = line_number + 1.
endloop.

* next fetch
fetch_number = fetch_number + 1.
* WARNING : i did not succed to return maximum fetch number in memory
*free memory id 'ZSTB_MAX_FETCH_NUMBER'.
*export fetch_number to memory id 'ZSTB_MAX_FETCH_NUMBER'.

* free memory
call function 'ZSTB_FREE_DS_MEMORY'.

endfunction.